\chapter{Prediktivní řízení}
\section{Úvod}
Prediktvní regulátor (MPC - Model Prediction Control) využívá k řízení znalost modelu systému a hledá optimální posloupnost řízení vzhledem k definovanému kritériu. Mezi jeho hlavní výhody patří možnost přímo pracovat s MIMO (s více vstupy a výstupy) systémy. Také je schopen zahrnout do výpočtu omezení jak na straně vstupů, tak i na straně výstupů.

Na počátku šedesátých let byl vyvinut optimální lineární kvadratický regulátor (LQR), tento regulátor minimalizuje kvadratickou kriteriální funkci stavů a vstupů bez omezení. Mezi jeho výhody patří dobrá stabilita které je dosaženo díky nekonečnému horizontu predikce \cite{history}. Nepočítá však s žádnými omezeními a tak není příliš nasazován v průmyslu. MPC regulátor byl původně vyvinut pro aplikace v chemickém průmyslu, kde řídil stovky vstupů a výstupů. Na konečném horizontu spočítá optimální posloupnost řízení sytému pro otevřenou smyčku, kde počáteční podmínka odpovídá současnému stavu systému. Poté je aplikován první krok řízení a probíhá znovu výpočet. Problémem  optimalizace na konečném horizontu je, že nezaručuje stabilitu systému. Pokud však máme stabilní systém a doba predikce je delší, než doba ustálení systému, tak regulátor je stabilní.

Rozvoj výpočetní techniky umožňuje zvětšovat velikost problému pro řešení. V roce $1979$ je prezentován regulátor DMC, který používá lineární přechodový model a kvadratickou kriteriální funkci. Regulátor počítá optimální výsledek jako úlohu nejmenších čtverců. V roce  $1983$ byl popsán algoritmus QDMC, který umožňoval systematicky zahrnout vstupní a výstupní omezení.

Na konci osumdesátých let byl uveden Shell Multivariable Optimizing Controller (SMOC), který používal stavový popis systému, takže může reprezentovat kompletní dynamiku (včetně nepozorovatelných módů) systému.

%Mějme definován diskrétní systém $y=f(x_0,u)$, kde $x_0$ jsou počáteční podmínky a $u$ je vstup do diskrétního systému. Mějme poslupnost řízení $u_k$, což je uspořádaná množina vstupů $u$ do diskrétního systému délky $N$. Dále mějme definovánu kriteriální funkci $J(f,x_0,u_k)$, která ze zadaného sytému $f$, počáteční podmínky $x_0$ a posloupností vstupů $u_k$ spočte vývoj systému o $N$ kroků dopředu v závislosti na vstupech $u$ v posloupností řízení $u_k$ a takto vypočtenému výsledku přiřadí určíté číslo. Délka posloupnoti po kterou se počítá výstup je \textbf{doba predikce} systému $\mathbf{T_p}$. Délka posloupnosti $u_k$ je \textbf{doba korekce} systému $\mathbf{T_k}$. Poté mějme nějaký řešitel, který pomocí změn vstupní posloupnosti $u_k$, tedy řízení $u$ v jednotlivých krocích, minimalizuje kritérium $J$ v závislosti na omezeních vstupů a výstupů.

%Takto obecně pojatý regulátor je implementačně příliš náročný, proto se používá lineární diskrétní model, čímž se o zjednoduší výpočet vývoje systému. Odezvu lineárního systému můžeme rozdělit na odezvu vynucenou stavem a odezvu na vstup. Odezva na vstup nás z pohledu minimalizace v závislosti na vstupu nezajímá (je konstantní) má však pro nás význam, pokud máme omezení na výstup systému. Také se vývoj systému dá popsat maticemi, což zjednodušuje výpočet a implementaci oproti obecnému modelu.

Základní myšlenka 

Kriteriární funkce bývá obvykle kvadratická forma, protože tato funkce má za dodržení určitých jasně definovaných podmínek určitě extrém.

\section{Formulace problému}

Základní rovnice pro formulaci problému byli vzaty z \cite{MTRC}.

Mějme diskrétní lineární systém popsán rovnicemi:
\begin{align}
x(k+1)&=\mathbf{M}x(k)+\mathbf{N}u(k),\\
y(k)&=\mathbf{C}x(k)+\mathbf{D}u(k).\nonumber
\end{align}
Kde vekor $x$ je sloupcový vektor o délce $n_x\in\mathbb{Z}$, kde $n_x$ je také řád systému. Vektor $u$ je sloupcový vektor o délce $n_u\in\mathbb{Z}$ což odpovídá počtu vstupů systému. Vektor $y$ je sloupcový vektor o délce $n_y\in\mathbb{Z}$, což odpovídá počtu výstupů systému. Matice $\mathbf{M}$ je čtvercová matice rozměru $n_x\times n_x$. Matice $\mathbf {N}$ je matice řízení a její rozměr je $n_x\times n_u$. Matice $\mathbf{C}$ a $\mathbf{D}$ jsou maticemi výstupu, jejich rozměry jsou $n_y\times n_x$ a $n_y\times n_u$.

Vývoj systému můžeme rozdělit na odezvu danou stavem a vstupem sytému. Odezva na stav je dána:
\begin{equation}
\begin{pmatrix}
y_x(k)\\
y_x(k+1)\\
y_x(k+2)\\
\vdots\\
y_x(k+T_p-1)
\end{pmatrix}=
\begin{pmatrix}
\mathbf{C}\\
\mathbf{CM}\\
\mathbf{CM}^2\\
\vdots\\
\mathbf{CM}^{(T_p-1)}
\end{pmatrix}x(k)=\mathbf{V}x(k).
\end{equation}
Odezva na vstup je popsána:
\begin{equation}
\begin{pmatrix}
y_u(k)\\
y_u(k+1)\\
y_u(k+2)\\
\vdots\\
y_u(k+T_p-1)
\end{pmatrix}=
\begin{pmatrix}
\mathbf{D}& & & & &\\
\mathbf{CN} & \mathbf{D} & & & &\\
\mathbf{CMN}&\mathbf{CN}&\mathbf{D}& &\\
\vdots& & &\ddots & &\\
\mathbf{CM}^{T_p-2}\mathbf{N}& & &\mathbf{CN} & \mathbf{D}
\end{pmatrix}
\begin{pmatrix}
u(k)\\
u(k+1)\\
u(k+2)\\
\vdots\\
u(k+T_p-1)
\end{pmatrix}=\mathbf{S}u_k.
\end{equation}
Odezva je tedy dána
\begin{equation}
y_k=
\begin{pmatrix}
y(k)\\
y(k+1)\\
y(k+2)\\
\vdots\\
y(k+T_p-1)
\end{pmatrix}=
\begin{pmatrix}
y_x(k)\\
y_x(k+1)\\
y_x(k+2)\\
\vdots\\
y_x(k+T_p-1)
\end{pmatrix}+
\begin{pmatrix}
y_u(k)\\
y_u(k+1)\\
y_u(k+2)\\
\vdots\\
y_u(k+T_p-1)
\end{pmatrix}
=\mathbf{V}x(k)+\mathbf{S}u_k.
\label{eq:vystup}
\end{equation}


Mějme definovanou kvadratickou formu pro jeden krok výstupu (na $k$ nezáleží) jako:
\begin{equation}
J_y=y^T\mathbb{Q}y
\end{equation}
a kvadratickou formu pro jeden krok vstupu jako:
\begin{equation}
J_u=u^T\mathbb{R}u.
\end{equation}
Matice $\mathbb{Q}$ musí být pozitivně semidefinitní a matice $\mathbb{R}$ musí být pozitivně definitní.
Výsledné ohodnocení pro jeden krok je dáno jako součet těchto dvou forem ve tvaru
\begin{equation}
J=J_y+J_u=y^T\mathbb{Q}y+u^T\mathbb{R}u.
\end{equation}
Musíme však počítat kritérium pro všechny kroky predikčního horizintu, toho dásáhneme pouhým sečtením ohodnocení jednotlivých kroků:
\begin{equation}
J=\sum_{k=0}^{T_p-1}\left(y^T(k)\mathbb{Q}y(k)+u^T(k)\mathbb{R}u(k)\right).
\label{eq:kriterium}
\end{equation}
Pokud zavedeme posloupnoti výstupů a řízení (tu už máme) a upravíme kriteriální matice jako:
\begin{align}
y_k=
\begin{pmatrix}
y^T(0)&y^T(1)&\cdots&y^T(T_p-1)
\end{pmatrix}^T,\\
u_k=
\begin{pmatrix}
u^T(0)&u^T(1)&\cdots&u^T(T_p-1)
\end{pmatrix}^T,\\
\mathbf{Q}=
\begin{pmatrix}
\mathbb{Q}&0&\cdots&&0\\
0&\mathbb{Q}&&&0\\
\vdots&&\ddots&&\vdots&\\
&&&\mathbb{Q}&0\\
0&\cdots&&0&\mathbb{Q}
\end{pmatrix},\\
\mathbf{R}=
\begin{pmatrix}
\mathbb{R}&0&\cdots&&0\\
0&\mathbb{R}&&&0\\
\vdots&&\ddots&&\vdots&\\
&&&\mathbb{R}&0\\
0&\cdots&&0&\mathbb{R}
\end{pmatrix}.
\end{align}
Lze poté přepsat rovnici (\ref{eq:kriterium}) do tvaru bez sumace:
\begin{equation}
J=y_k^T\mathbf{Q}y_k+u_k^T\mathbf{R}u_k.
\end{equation}

Kritérium (\ref{eq:kriterium}) při dodržení podmínek pro pozitivní semi/definitnost matic, bude mít minimum v bodě, kdy bude výstup i vstup nulový. Tohoto stavu se bude snažit regulátor dosáhnout. Může nastat situace, že chceme, aby systém sledoval určitou trajektorii, toho dosáhneme prostým odečtením této trajektoriie od výstupu. Upravíme tedy výstupní část pro jeden krok:
\begin{equation}
J_y=(y-r)^T\mathbf{Q}(y-r),
\end{equation}
kde $r$ je vektor požadované trajektorie. Můžeme opět zavést posloupnost trajektorie:
\begin{equation}
r_k=
\begin{pmatrix}
r^T(0)&r^T(1)&\cdots&r^T(T_p-1)
\end{pmatrix}^T.
\end{equation}
Poté bude kritérium (\ref{eq:kriterium}) vypadat jako:
\begin{equation}
J=(y_k-r_k)^T\mathbf{Q}(y_k-r_k)+u_k^T\mathbf{R}u_k.
\end{equation}

Takto navržený regulátor nemusí dosáhnout nulové ustálené odchylky. Aby regulátor měl integrační charakter (nulovou ustálenou odchylku) zavádí se místo vážení absoultní hodnoty vstupu, vážení změny vstupu \cite{ross}. Změnu vstupu získáme jako:
\begin{equation}
\Delta u_k=\mathbf{D}_i u_k-\tilde{u}_k.
\end{equation}
kde:
\begin{align}
\mathbf{D}_i=\begin{pmatrix}
1&&&\\
-1&1&&\\
&\ddots&\ddots&\\
&&-1&1
\end{pmatrix},&& \tilde{u}_k=
\begin{pmatrix}
u(k-1)\\
0\\
\vdots\\
0
\end{pmatrix}.
\end{align}

Výsledné kritérium pro regulátor s integračním charakterem a sledováním reference je poté ve tvaru:
\begin{equation}
J=(y_k-r_k)^T\mathbf{Q}(y_k-r_k)+\Delta u_k^T\mathbf{R}\Delta u_k.
\label{eq:J_INT_FINAL}
\end{equation}

\subsection{Tvrdá omezení}

\subsection{Měkká omezení}

Omezení vstupu systému jsou zpravidla závislá na vstupních akčních členech. Ty jsou schopny dosáhnout určitých krajních hodnot akčních zásahů a ty nejsou schopny překročit, proto jsou mezení na vstupu tvrdá (hard), jejich hodnotu nelze překročit. Omezení na výstupu a stavu jsou obvykle dána pouze požadavaným rozsahem pracovních hodnot, také nemůžou být tvrdě omezena, protože by regulátor nemusel být schopen nalézt trajektorii, která by danou podmínku splnila na příklad z důvodu poruchy. Z těchto důvodů se nejedná o nepřekročitelné hodnoty, ale můžou být překročeny s určitou penalizací. Proto se nazývají měkké (soft) omezení. Tvrdá omezení se zadávájí přímo do řešitele, měkká omezení se musejí převést na tvrdá omezení.

Odvození převodu měkkých omezení na tvrdé je podobné pro horní i dolní omezení. Odvození ukážu jen pro dolní omezení.

Mějme tedy dolní omezení, pro která platí:
\begin{equation}
w_l\leq y_k.
\end{equation}
Tato podmínka říká, že posloupnost výstupu systému $y_k$ by neměla být menší než $w_l$. Jedná se o sloupcové vektory, jejich délka je stejná a je $n_yT_p$. Operaci menší než pro vektory rozumíme tak, že musí platit $y_k(n)\geq w_l(n)$ pro všechna $n\in (1,2,\dots,n_yT_p)$. Sloupcový vektor $w_l$ se skladá jako:
\begin{equation}
w_l=
\begin{pmatrix}
w(0)&w(1)&\cdots&w(T_p-1)
\end{pmatrix}^T,
\end{equation}
kde $w(0)$, $w(1)$ atd. označují dolní omezení (jejich rozměr je $1\times n_y$), které by mělo být splněno. Toto omezení může být pro všechny kroky konstantní, nebo se může měnit s krokem predikce a vývojem systému.

Nyní tyto omezení upravíme tak, aby se porovnávalo s nulovým vektorem:
\begin{equation}
0\leq y_k-w_l.
\end{equation}
Na pravé straně však chceme výraz menší než nula, tak od ní odečteme sloupcový vektor $\epsilon_l>0$. A dostaneme
\begin{equation}
0\leq y_k-w_l-\epsilon_l.
\end{equation}
Vektory $y_k$ a $w_l$ jsou v tomto výrazu konstantní, vektor $\epsilon_l$ je parametr, který minimalizujeme. Celou levou stranu můžeme označit jako:
\begin{equation}
e_l=y_k-w_l-\epsilon_l.
\end{equation}
A do funkce pro vážení můžeme přidat člen:
\begin{equation}
J_H=e_l^T\mathbf{W}e_l.
\label{eq:JSoft}
\end{equation}
Kde $\mathbf{W}$ je pozitivně definitní matice o velikosti $n_yT_p\times n_yT_p$. Obvykle matici $\mathbb{W}$ definujeme jen pro jeden krok (má pak rozměry jen $n_y\times n_y$) a vytvoříme opět diagonální matici jako:
\begin{equation}
\mathbf{W}=
\begin{pmatrix}
\mathbb{W}&0&\cdots&&0\\
0&\mathbb{W}&&&0\\
\vdots&&\ddots&&\vdots&\\
&&&\mathbb{W}&0\\
0&\cdots&&0&\mathbb{W}
\label{eq:downSoft}
\end{pmatrix}
\end{equation}

Pro horní omezení je odvození podobné, jen se vektor $\epsilon_u$ neodečítá, ale přičítá. Takže dostaneme chybu ve tvaru:
\begin{equation}
e_u=y_k-w_u+\epsilon_u.
\end{equation}

\subsection{Maticový zápis}

Pro nalezení minima budeme minimalizovat funkci ve tvaru:
\begin{align}
\min_\mathbb{x}\mathbb{x}^T\mathbf{H}\mathbb{x}+f^T\mathbb{x}\label{eq:min},\\
\text{v závislosti na: }\text{lb}\leq\mathbb{x}\leq\text{ub}\label{eq:bound}.
\end{align}
Kde $\mathbf{H}$ je čtvercová matice a $f$ je sloupcový vektor.

První definujeme vektor $\mathbb{x}$, který minimalizujeme v rovnici (\ref{eq:min}), vektor $\mathbb{x}$ v tomto případě nepopisuje stav systému, ale vektor pro které hledáme minimum. V našem případě jsou volné proměnné $u_k$, $\epsilon_u$ a $\epsilon_l$. Vektor $\mathbb{x}$ je poté definován jako sloupcový:
\begin{equation}
\mathbb{x}=
\begin{pmatrix}
u_k\\
\epsilon_l\\
\epsilon_u
\end{pmatrix}.
\label{eq:vec_opt}
\end{equation}
V dalším textu bude $x$ už označovat stav systému.

Z rovnice (\ref{eq:J_INT_FINAL}) vezmeme část pro vážení výstupů, dosadíme rovnici (\ref{eq:vystup}) a dostaneme:
\begin{align}
(y_k-r_k)^T\mathbf{Q}(y_k-r_k)&=(x\mathbf{V}^T+u_k^T\mathbf{S}^T-r_k^T)\mathbf{Q}(\mathbf{V}x+\mathbf{S}u_k-r_k).
\end{align}
Roznásobením této rovnice podle první závorky dostaneme:
\begin{align*}
&x^T\mathbf{V}^T\mathbf{QV}x+x^T\mathbf{V}^T\mathbf{QS}u_k-x^T\mathbf{V}^T\mathbf{Q}r_k+\\
&u_k^T\mathbf{S}^T\mathbf{QV}x+u_k^T\mathbf{S}^T\mathbf{QS}u_k-u_k^T\mathbf{S}^T\mathbf{Q}r_k+\\
&-r_k^T\mathbf{QV}x-r_k^T\mathbf{QS}u_k+r_k^T\mathbf{Q}r_k
\end{align*} 
Nyní vybereme součiny, kde se vyskytuje nějaká proměnná, která je ve vektoru optimalizace \ref{eq:vec_opt}. V tomto případě je to jediná proměnná $u_k$. Ta se vyskytuje v kvadratickém členu:
\begin{equation}
u_k^T\mathbf{S}^T\mathbf{QS}u_k,
\label{eq:ukQvad}
\end{equation}
tento výraz bude v matici $\mathbf{H}$. Dále se tam vyskytují lineární členy s $u_k$, tyto členy jsou tam vždy dvakrát, akorát transponované. Provedeme jejich transpozici tak, aby vektor $u_k$ byl vpravo. Dostaneme:
\begin{equation}
2x^T\mathbf{V}^T\mathbf{QS}u_k-2r_k^T\mathbf{QS}u_k,
\label{eq:ukQlin}
\end{equation}
tato rovnice bude součástní lineárního členu $f$.

Nyní z rovnice (\ref{eq:J_INT_FINAL}) vezmeme člen pro vážení vstupů.
\begin{align}
\Delta u_k^T\mathbf{R}\Delta u_k&=(u_k^T\mathbf{D}_i^T-\tilde{u}_k^T)\mathbf{R}(\mathbf{D}_iu_k-\tilde{u}_k)
\end{align}
Opět roznásobíme výraz podle první závorky a dostaneme:
\begin{align*}
&u_k^T\mathbf{D}_i^T\mathbf{RD}_iu_k-u_k^T\mathbf{D}_i^T\mathbf{R}\tilde{u}_k+\\
&-\tilde{u}_k^T\mathbf{RD}_iu_k+\tilde{u}_k^T\mathbf{R}\tilde{u}_k.
\end{align*}
Jediná proměnná, která se tu vyskytuje je $u_k$. Kvadratický člen je:
\begin{equation}
u_k^T\mathbf{D}_i^T\mathbf{RD}_iu_k,
\label{eq:ukRQvad}
\end{equation}
bude opět součástí matice $\mathbf{H}$. Lineární člen je tu opět dvakrát transponovaný a je ve tvaru:
\begin{equation}
-2\tilde{u}_k\mathbf{RD}_iu_k,
\label{eq:ukRlin}
\end{equation}
tento výraz bude součástí lineárního členu $f$.

Vážení výstupu pro dolní omezení podle rovnice (\ref{eq:JSoft}) upravíme:
\begin{align}
e_l^T\mathbf{W}e_l&=(u^T\mathbf{S}^T+x^T\mathbf{V}^T-w_l^T-\epsilon_l^T)\mathbf{W}(\mathbf{S}u+\mathbf{V}x-w_l-\epsilon_l).
\end{align}
Opět roznásobíme podle první závorky a dostaneme:
\begin{align*}
&u_k^T\mathbf{S}^T\mathbf{WS}u_k+u_k^T\mathbf{S}^T\mathbf{WV}x-u_k^T\mathbf{S}^T\mathbf{W}w_l-u_k^T\mathbf{S}^T\mathbf{W}\epsilon_l+\\
&x^T\mathbf{V}^T\mathbf{WS}u+x^T\mathbf{V}^T\mathbf{WV}x-x^T\mathbf{V}^T\mathbf{W}w_l-x^T\mathbf{V}^T\mathbf{W}\epsilon_l+\\
&-w_l^T\mathbf{WS}u_k-w_l^T\mathbf{WV}x+w_l^T\mathbf{W}w_l+w_l^T\mathbf{H}\epsilon_l+\\
&-\epsilon_l^T\mathbf{WS}u_k-\epsilon_l^T\mathbf{WV}x+\epsilon_l^T\mathbf{W}w_l+\epsilon_l^T\mathbf{W}\epsilon_l.
\end{align*}
V tomto případě už tu máme víc proměnných, kromě $u_k$ i $\epsilon_l$. Kvadratické člen pro $u_k$ je:
\begin{equation}
u_k^T\mathbf{S}^T\mathbf{WS}u_k.
\label{eq:ukDownQvad}
\end{equation}
Lineární člen pro $u_k$ je:
\begin{equation}
2x^T\mathbf{V}^T\mathbf{WS}u_k-2w_l^T\mathbf{WS}u_k.
\label{eq:ukDownLin}
\end{equation}
Kvadraticnký člen podle $\epsilon_l$ je:
\begin{equation}
e_l^T\mathbf{W}e_l.
\label{eq:e_lQvad}
\end{equation}
Lineární člen podle $e_l$ je:
\begin{equation}
-2x^T\mathbf{V}^T\mathbf{W}\epsilon_l+2w_l^T\mathbf{W}\epsilon_l.
\label{eq:e_lLin}
\end{equation}
Nyní tam přibyly křížové členy, uvedu ten s $u_k$ napravo, ale existuje i člen s $u_k$ nalevo.
\begin{equation}
-\epsilon_l^T\mathbf{WS}u_k
\label{eq:e_lu_k}
\end{equation}

Poslední odvození je pro pro horní omezení, vezmu kritérium pro horní omezení:
\begin{align*}
e_u^T\mathbf{W}e_u&=(u_k^T\mathbf{S}^T+x^T\mathbf{V}^T-w_u^T+\epsilon_u^T)\mathbf{W}(\mathbf{S}u_k+\mathbf{V}x-w_u+\epsilon_u)
\end{align*}
Po roznásobení podle první závorky dostaneme:
\begin{align*}
&u_k^T\mathbf{S}^T\mathbf{WS}u_k+u_k^T\mathbf{S}^T\mathbf{WV}x-u_k^T\mathbf{S}^T\mathbf{W}w_u+u_k^T\mathbf{S}^T\mathbf{W}\epsilon_u+\\
&x^T\mathbf{V}^T\mathbf{WS}u_k+x^T\mathbf{V}^T\mathbf{WV}x-x^T\mathbf{V}^T\mathbf{W}w_u+x^T\mathbf{V}^T\mathbf{W}\epsilon_u+\\
&-w_u^T\mathbf{WS}u_k-w_u^T\mathbf{WV}x+w_u^T\mathbf{W}w_u-w_u^T\mathbf{W}\epsilon_u+\\
&\epsilon_u^T\mathbf{WS}u_k+\epsilon_u^T\mathbf{WV}x-\epsilon_u^T\mathbf{W}w_u+\epsilon_u^T\mathbf{W}\epsilon_u.
\end{align*}
Kvadratické členy podle $u_k$ jsou:
\begin{equation}
u_k^T\mathbf{S}^T\mathbf{WS}u_k.
\label{eq:ukUpQvad}
\end{equation}
Lineární člen $u_k$ je:
\begin{equation}
2x^T\mathbf{V}^T\mathbf{WS}u_k-2w_u^T\mathbf{WS}u_k.
\label{eq:ukUpLin}
\end{equation}
Kvadratický člen podle $\epsilon_u$:
\begin{equation}
\epsilon_u^T\mathbf{W}\epsilon_u.
\label{eq:e_uQvad}
\end{equation}
Lineární člen pro $\epsilon_u$:
\begin{equation}
2x^T\mathbf{V}^T\mathbf{W}\epsilon_u-2w_u^T\mathbf{W}\epsilon_u.
\label{eq:e_uLin}
\end{equation}
Nakonec zbývá křižový člen, opět uvedu jen ten s $u_k$ napravo:
\begin{equation}
-\epsilon_uT\mathbf{WS}u_k
\label{eq:e_uu_k}
\end{equation}

Při odvozování je mnoho součinů nepoužitých, tyto součiny jsou konstantní vzhledem k optimlizovaným proměnným. Nemají tedy vliv na polohu minima, ale ovlivňují výslednou hodnotu kriteriální funkce. V našem případě nás hodnota kriteriální funkce nezajímá, takže můžeme tyto součiny zanedbat.

Nyní když máme odovzeny všechny rovnice, které budeme potřebovat, můžeme určit matici $\mathbf{H}$ a vektor $f$.

Nejprve lineární člen. Podle (\ref{eq:min}) je lineární člen ve tvaru:
\begin{equation}
f\mathbb{x},
\end{equation}
za $\mathbb{x}$ můžeme dosadit a uvidíme, že $f$ je vektor s třemi bloky:
\begin{equation}
f^T
\begin{pmatrix}
u_k\\
\epsilon_l\\
\epsilon_u
\end{pmatrix}=
\begin{pmatrix}
f_1^T&f_2^T&f_3^T
\end{pmatrix}
\begin{pmatrix}
u_k\\
\epsilon_l\\
\epsilon_u
\end{pmatrix}=
\begin{pmatrix}
f_1^Tu_k&f_2^T\epsilon_l&f_3^T\epsilon_u
\end{pmatrix}.
\end{equation}

Víme jak má vypadat součet lineárních členů (\ref{eq:ukQlin}), (\ref{eq:ukRlin}), (\ref{eq:ukDownLin}), (\ref{eq:e_lLin}), (\ref{eq:ukUpLin}), (\ref{eq:e_uLin}) a (\ref{eq:e_uLin}). Pomocí násobení matic dostáváme:
\begin{align*}
f_1&=2x^T\mathbf{V}^T\mathbf{QS}-2r_k^T\mathbf{QS}-2\tilde{u}\mathbf{RD}_i+4x^T\mathbf{V}^T\mathbf{WS}-2w_l^T\mathbf{WS}-2w_u^T\mathbf{HS},\\
f_2&=-2x^T\mathbf{V}^T\mathbf{W}+2w_l^T\mathbf{W},\\
f_3&=2x^T\mathbf{V}^T\mathbf{W}-2w_l^T\mathbf{W}.
\end{align*}
Tedy vektor $f$ je:
\begin{equation}
\begin{pmatrix}
2x^T\mathbf{V}^T\mathbf{QS}-2r_k^T\mathbf{QS}-2\tilde{u}\mathbf{RD}_i+4x^T\mathbf{V}^T\mathbf{WS}-2w_l^T\mathbf{WS}-2w_u^T\mathbf{HS}\\
-2x^T\mathbf{V}^T\mathbf{W}+2w_l^T\mathbf{W}\\
2x^T\mathbf{V}^T\mathbf{W}-2w_l^T\mathbf{W}
\end{pmatrix}
\end{equation}

Pro matici $\mathbf{H}$ dostávám:
\begin{equation}
\mathbb{x}^T\mathbf{H}\mathbb{x}=\begin{pmatrix}
u_k^T&\epsilon_l^T&\epsilon_u^T
\end{pmatrix}\mathbf{H}
\begin{pmatrix}
u_k\\
\epsilon_l\\
\epsilon_u
\end{pmatrix}.
\end{equation}
Stejným způsobem dostaneme:
\begin{equation}
\mathbf{H}=\begin{pmatrix}
\mathbf{S}^T\mathbf{QS}+\mathbf{S}^T\mathbf{WS}+\mathbf{D}i^T\mathbf{RD}_i&-\mathbf{S}^T\mathbf{W}&\mathbf{S}^T\mathbf{W}\\
-\mathbf{WS}&\mathbf{W}&0\\
\mathbf{WS}&0&\mathbf{W}
\end{pmatrix}
\end{equation}

Omezení v rovnici (\ref{eq:bound}) vytvoříme jako:
\begin{equation}
\begin{pmatrix}
u_{k_{min}}\\
0\\
0
\end{pmatrix}
\leq \begin{pmatrix}
u_k\\
\epsilon_l\\
\epsilon_u
\end{pmatrix}\leq
\begin{pmatrix}
u_{k_{max}}\\
\varepsilon\\
\varepsilon
\end{pmatrix}.
\end{equation} 
Vektory $u_{k_{min}}$ a $u_{k_{max}}$ jsou omezení pro vstupy. Měkké omezení pro výstupy $e_l$ a $e_u$ musí být nezáporné a hodnota $\varepsilon$ je velké kladné číslo. Mělo by být tak velké, aby nikdy hodnoty měkkých omezení nedosáhly horní hranice. V případě, že by dosáhly této hranice tak by se staly měkké omezení tvrdými omezeními.


\section{Nástroje pro redukci velikosti problému}

Velikost MPC problému narůstá lineárně s dobou predikce. Pokud mám dobu predikce $T_p$ a velikost vstupu je $n_u$, tak musím vyřešit úlohu kvadratického programování s $T_pn_u$ stupni volnosti. Pokud ještě budu používat soft omezení tak se přidá dalších $2T_pn_y$ stupňů volnosti pro omezení výstupu. Jelikož máme jen omezené zdroje a výsledku chceme dosáhnout v rozumném čase musíme omezit velikost řešeného problému. 
\subsection{Blokování vstupů}

Prvním nástrojem pro omezení velikosti problému je blokování vstupů.  Po celou dobu predikce $T_p$ umožňujeme měnit vstup v každém kroku. Můžeme však sloučit několik kroků jdoucích za sebou a aplikovat v nich stejné řízení. Tím snížíme velikost problému při malém snížení kvality řízení \cite{blocking}. Blokování vstupů provedeme úpravou matice $S$, která popisuje odezvu systému na vstup:
\begin{equation}
\mathbf{S}^\prime=\mathbf{ST}.
\end{equation}
Matice $\mathbf{S}^\prime$ je redukovaná matice a matice $T$ je matice provádějící redukci. Její rozměry jsou $T_pn_x\times T_k n_u$. Mějme jednotkovou matici $E$ o rozměru $n_u\times n_u$. Pomocí ní je bloková matice $T$ definována jako:
\begin{equation}
\mathbf{T}=\begin{pmatrix}
E&&&\\
&E&&\\
&E&&\\
&&\ddots&\\
&&&E\\
\end{pmatrix}.
\end{equation}
Počet sloupců blokové matice  $T$ odpovídá době korekce $T_c$. Počet řádků odpovídá době predikce $T_p$. Pokud chceme sloučit dva po sobě následující kroky řízení do jednoho, umístíme na příslušné řádky do stejného sloupce jednotkovou matici $E$. Tedy jestliže chceme aby kroky $3$ a $4$ byli sloučené, tak na třetím a čtvrtém řádku bude matice $E$ ve třetím sloupci. Za předpokladu, že kroky $1$ a $2$ nejsou sloučené. Obsazování sloupců musí postupně narůstat. Tedy jestliže v $i$-tém řádku je jednotková matice ve sloupci $j$, tak musí platit pro řádky $n>i$ to, že matice $E$ je ve sloupci $m\geq j$.

\subsection{Ředěnná měkká omezení}

Pokud používáme měkká omezení na výstupu roste nám také složitost problému. Horní a dolní omezení v jednom kroku predikce na jednu proměnnou přidávají každé po jednom stupni volnosti kvadratického problému, tedy celkově se zvětší problém optimalizační problém o dvě proměnné. Pokud aplikuji toto omezení na více kroků, tak úměrně tomu roste počet stupňů volnosti problému.

Z důvodu zabránění nárustu velikosti problému se používají soft omezení jen na podmnožinu výstupních proměnných. Dalším způsobem redukce je aplikovat soft omezení jen na určitý počet kroků.

V rovnici (\ref{eq:downSoft}) je uvedena rovnice pro případ dolních omezení, kdy využíváme soft omezení pro všechny výstupy a všechny kroky. První prvek ve vektorech $y_k$, $w_l$ a $\epsilon_l$ odpovídá prvnímu výstupu v prnímu kroku. Prvek na pozici $n_y+1$ odpovídá prvnímu výstupu v druhém kroku. Obecně výstup na pozici $k$ v kroku $n$ je na pozici $k+n\cdot n_y$ . Redukci problému můžeme dosáhnout pohým ponecháním řádků, které příšluší proměnným, které chceme ponechat.




















































